package com.bing.springboot.controller;

import com.bing.springboot.utils.WebUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.util.ResourceUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.UUID;

/**
 * @author 徐
 * @version 1.0
 * 文件上传-控制器
 */
@Controller
@Slf4j
public class UploadController {

    /**
     * 处理转发到用户注册-可以完成文件上传界面
     * @return
     */
    @GetMapping("/upload.html")
    public String uploadPage(){
        //视图解析，转发到templates/upload.html
        return "upload";
    }

    /**
     * 接受注册的表单-包括处理文件上传
     * @return
     */
    @ResponseBody
    @PostMapping("/upload")
    public String upload(@RequestParam("name") String name,
                         @RequestParam("email") String email,
                         @RequestParam("age") Integer age,
                         @RequestParam("job") String job,
                         @RequestParam("header") MultipartFile header,
                         @RequestParam("photos") MultipartFile[] photos) throws IOException {

        //输出日志，查看提交的信息
        log.info("上传的信息 name={} email={} age={} job={} header={} photos={}"
                ,name,email,age,job,header.getSize(),photos.length);

        //如果信息都成功得到，我们就将文件保存到指定的目录,比如 d:\\temp＿upload
        //1.我们先将文件保存到指定的目录,比如 d:\\temp_upload
        //2.后面我们在演示把文件保存到动态创建的目录,比如类加载路径

//        if (!header.isEmpty()){//上传头像文件不为空
//            //上传文件名称
//            String originalFilename = header.getOriginalFilename();
//            //文件替换
//            header.transferTo(new File("d:\\temp_upload\\" + originalFilename));
//        }
//
//        if (photos.length > 0){//处理上传宠物的图片
//            for (MultipartFile photo : photos) {
//                //上传文件名称
//                String originalFilename = photo.getOriginalFilename();
//                //文件替换
//                photo.transferTo(new File("d:\\temp_upload\\" + originalFilename));
//            }
//        }

        //把文件保存到动态创建的目录,比如类加载路径
        uploadTarget(header,photos);

        return "注册用户成功/文件上传成功";
    }

    //把文件保存到动态创建的目录,比如类加载路径
    public void uploadTarget(MultipartFile header,MultipartFile[] photos) throws IOException {
        //获取到类路径
        //path=/E:/work_space_idea/hsp_springboot/springboot-usersys/target/classes/
        String path = ResourceUtils.getURL("classpath:").getPath();
        log.info("path={}",path);
        //创建目录文件,加入安装日期分目录存放
        File file = new File(path + WebUtils.getUploadFileDirectory());
        if (!file.exists()){//目录文件不存在，就创建
            file.mkdirs();
        }

        if (!header.isEmpty()){//上传头像文件不为空
            //上传文件名称
            String originalFilename = header.getOriginalFilename();
            //todo 防止文件覆盖
            String fileName = UUID.randomUUID().toString() +"_"+ System.currentTimeMillis() + "_"+ originalFilename;
            //获取需要指定保存文件的绝对路径
            //即 .../springboot-usersys/target/classes/static/images/upload
            log.info("保存文件的绝对路径={}" ,file.getAbsolutePath());

            header.transferTo(new File(file.getAbsolutePath() + "/"+ fileName));
        }

        if (photos.length > 0){//处理上传宠物的图片
            for (MultipartFile photo : photos) {
                //上传文件名称
                String originalFilename = photo.getOriginalFilename();
                String fileName = UUID.randomUUID().toString() +"_"+ System.currentTimeMillis() + "_"+ originalFilename;
                photo.transferTo(new File(file.getAbsolutePath() + "/" + fileName));
            }
        }

    }

}
